package com.lhy.wcss.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lhy.wcss.common.BaseConstant;
import com.lhy.wcss.model.domain.*;
import com.lhy.wcss.mapper.ProductMapper;
import com.lhy.wcss.model.dto.PageDTO;
import com.lhy.wcss.model.dto.ProductDTO;
import com.lhy.wcss.model.vo.ProductVO;
import com.lhy.wcss.service.ProductImageService;
import com.lhy.wcss.service.ProductService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lhy.wcss.service.SkuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;


@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {
    @Autowired
    private ProductImageService productImageService;
    @Autowired
    private SkuService skuService;


    @Override
    @Transactional
    public void mySave(ProductDTO productDTO) {
        /*将当前数据保存到product表中*/
        this.save(productDTO);
        /*
        * 已经可以获取到product的id
        * 保存product-image表
        * 保存Sku
        * */
        List<ProductImage> imgs = productDTO.getUrls().stream().map(s -> new ProductImage().setPath(s).setProductId(productDTO.getId())).collect(Collectors.toList());
        List<Sku> skus = productDTO.getSkus().stream().map(s -> new Sku().setName(s).setProductId(productDTO.getId())).collect(Collectors.toList());

        productImageService.saveBatch(imgs);
        skuService.saveBatch(skus);

    }
    /*含义列表
    * 获取寒衣图片
    * 获取寒衣规格*/
    @Override
    public Page<ProductVO> pageList(PageDTO pageDTO) {
        //查询product的信息，以及寒衣批次名称，数据字典中的性别等信息（三表：product表 批次表，数据字典表）
        Page<ProductVO> page=new Page<>(pageDTO.getPageNum(),pageDTO.getPageSize());
        /*当前的page是SQL查询后返回的page
        * 包含所有的寒衣信息以及其对应的寒衣批次和寒衣适用性别
        * 在通过当前的page查询去查询寒衣对应的图片和寒衣规格==》product_Id
        * product_id==>与图片表和规格表建立联系*/
        page=baseMapper.pageList(page);
        // 通过遍历所有的
        page.getRecords().stream().forEach(productVO -> {
            //构建查询寒衣图片条件
            QueryWrapper<ProductImage> wrapper=new QueryWrapper<>();
            wrapper.lambda().eq(ProductImage::getProductId,productVO.getId());
            //构建查询寒衣规格条件productVO对象，给每一个对象赋值
            QueryWrapper<Sku> wrapper1=new QueryWrapper<>();
            wrapper1.lambda().eq(Sku::getProductId,productVO.getId());
            //通过构建的条件查询相应的图片集合和规格集合赋值给对应的productVO对象
            productVO.setImgs(productImageService.list(wrapper)).setSkus(skuService.list(wrapper1));
        });
        return page;
    }

}
